{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Cartpole-v0, a.k.a Inverted Pendulum\n",
    "### Double Deep Q-Network (DDQN),  Lucky case: solved in 239 episodes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Import packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input_dim:  4 , output_dim:  2 , hidden_dim:  16\n",
      "threshold:  195.0\n"
     ]
    }
   ],
   "source": [
    "import gym\n",
    "import numpy as np\n",
    "import torch\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "import time\n",
    "\n",
    "from collections import deque\n",
    "from ddqn_agent import Agent, FloatTensor\n",
    "from replay_buffer import ReplayMemory, Transition\n",
    "from  torch.autograd import Variable\n",
    "\n",
    "# set up matplotlib\n",
    "is_ipython = 'inline' in matplotlib.get_backend()\n",
    "if is_ipython:\n",
    "    from IPython import display\n",
    "\n",
    "plt.ion()\n",
    "\n",
    "use_cuda = torch.cuda.is_available()\n",
    "FloatTensor = torch.cuda.FloatTensor if use_cuda else torch.FloatTensor\n",
    "device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n",
    "\n",
    "BATCH_SIZE = 64  \n",
    "gamma = 0.99\n",
    "LEARNING_RATE = 0.001\n",
    "TARGET_UPDATE = 10\n",
    "\n",
    "num_episodes = 20000\n",
    "print_every = 10\n",
    "hidden_dim = 16 ## 32 ## 16 ## 64 ## 16\n",
    "min_eps = 0.01\n",
    "max_eps_episode = 200 # 100 ## 25 ## 150 ## 50\n",
    "\n",
    "env = gym.make('CartPole-v0')\n",
    "env = gym.wrappers.Monitor(env, directory=\"monitors\", force=True)\n",
    "        \n",
    "space_dim =  env.observation_space.shape[0] # n_spaces\n",
    "action_dim = env.action_space.n # n_actions  \n",
    "print('input_dim: ', space_dim, ', output_dim: ', action_dim, ', hidden_dim: ', hidden_dim)\n",
    "\n",
    "threshold = env.spec.reward_threshold\n",
    "print('threshold: ', threshold)\n",
    "\n",
    "# Train agent for Double Deep Q_network\n",
    "agent = Agent(space_dim, action_dim, hidden_dim)\n",
    "\n",
    "    \n",
    "def epsilon_annealing(i_epsiode, max_episode, min_eps: float):\n",
    "    ##  if i_epsiode --> max_episode, ret_eps --> min_eps\n",
    "    ##  if i_epsiode --> 1, ret_eps --> 1  \n",
    "    slope = (min_eps - 1.0) / max_episode\n",
    "    ret_eps = max(slope * i_epsiode + 1.0, min_eps)\n",
    "    return ret_eps        \n",
    "\n",
    "def save(directory, filename):\n",
    "    torch.save(agent.q_local.state_dict(), '%s/%s_local.pth' % (directory, filename))\n",
    "    torch.save(agent.q_target.state_dict(), '%s/%s_target.pth' % (directory, filename))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Single episode"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_episode(env, agent, eps):\n",
    "    \"\"\"Play an epsiode and train\n",
    "\n",
    "    Args:\n",
    "        env (gym.Env): gym environment (CartPole-v0)\n",
    "        agent (Agent): agent will train and get action        \n",
    "        eps (float): eps-greedy for exploration\n",
    "\n",
    "    Returns:\n",
    "        int: reward earned in this episode\n",
    "    \"\"\"\n",
    "    state = env.reset()\n",
    "    done = False\n",
    "    total_reward = 0\n",
    "    \n",
    "\n",
    "    while not done:\n",
    "\n",
    "        action = agent.get_action(FloatTensor([state]), eps)\n",
    "        \n",
    "        next_state, reward, done, _ = env.step(action.item())\n",
    "\n",
    "        total_reward += reward\n",
    "\n",
    "        if done:\n",
    "            reward = -1\n",
    "                    \n",
    "        # Store the transition in memory\n",
    "        agent.replay_memory.push(\n",
    "                (FloatTensor([state]), \n",
    "                 action, # action is already a tensor\n",
    "                 FloatTensor([reward]), \n",
    "                 FloatTensor([next_state]), \n",
    "                 FloatTensor([done])))\n",
    "                 \n",
    "\n",
    "        if len(agent.replay_memory) > BATCH_SIZE:\n",
    "\n",
    "            batch = agent.replay_memory.sample(BATCH_SIZE)\n",
    "            \n",
    "            agent.learn(batch, gamma)\n",
    "\n",
    "        state = next_state\n",
    "\n",
    "\n",
    "    return total_reward\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Train the agent, 246 episodes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Episode:    10 Score:  10.0  Avg.Score: 16.64, eps-greedy:  0.95 Time: 00:00:08\n",
      "Episode:    20 Score:  11.0  Avg.Score: 16.71, eps-greedy:  0.90 Time: 00:00:08\n",
      "Episode:    30 Score:  25.0  Avg.Score: 19.65, eps-greedy:  0.85 Time: 00:00:10\n",
      "Episode:    40 Score:  18.0  Avg.Score: 19.15, eps-greedy:  0.80 Time: 00:00:10\n",
      "Episode:    50 Score:  44.0  Avg.Score: 22.90, eps-greedy:  0.75 Time: 00:00:11\n",
      "Episode:    60 Score:  45.0  Avg.Score: 24.92, eps-greedy:  0.70 Time: 00:00:12\n",
      "Episode:    70 Score:  58.0  Avg.Score: 28.03, eps-greedy:  0.65 Time: 00:00:18\n",
      "Episode:    80 Score: 131.0  Avg.Score: 34.57, eps-greedy:  0.60 Time: 00:00:21\n",
      "Episode:    90 Score: 143.0  Avg.Score: 41.48, eps-greedy:  0.55 Time: 00:00:27\n",
      "Episode:   100 Score:  67.0  Avg.Score: 45.93, eps-greedy:  0.51 Time: 00:00:30\n",
      "Episode:   110 Score:  75.0  Avg.Score: 53.24, eps-greedy:  0.46 Time: 00:00:34\n",
      "Episode:   120 Score: 180.0  Avg.Score: 65.91, eps-greedy:  0.41 Time: 00:00:38\n",
      "Episode:   130 Score: 200.0  Avg.Score: 80.15, eps-greedy:  0.36 Time: 00:00:48\n",
      "Episode:   140 Score: 180.0  Avg.Score: 95.33, eps-greedy:  0.31 Time: 00:00:53\n",
      "Episode:   150 Score: 184.0  Avg.Score: 110.41, eps-greedy:  0.26 Time: 00:00:58\n",
      "Episode:   160 Score: 169.0  Avg.Score: 125.31, eps-greedy:  0.21 Time: 00:01:03\n",
      "Episode:   170 Score: 200.0  Avg.Score: 140.17, eps-greedy:  0.16 Time: 00:01:11\n",
      "Episode:   180 Score: 200.0  Avg.Score: 151.83, eps-greedy:  0.11 Time: 00:01:17\n",
      "Episode:   190 Score: 200.0  Avg.Score: 162.01, eps-greedy:  0.06 Time: 00:01:24\n",
      "Episode:   200 Score: 200.0  Avg.Score: 173.57, eps-greedy:  0.01 Time: 00:01:30\n",
      "Episode:   210 Score: 200.0  Avg.Score: 184.31, eps-greedy:  0.01 Time: 00:01:35\n",
      "Episode:   220 Score: 199.0  Avg.Score: 189.83, eps-greedy:  0.01 Time: 00:01:44\n",
      "Episode:   230 Score: 200.0  Avg.Score: 192.78, eps-greedy:  0.01 Time: 00:01:49\n",
      "\n",
      " Environment solved in 238 episodes!\tAverage Score: 195.21\n"
     ]
    }
   ],
   "source": [
    "def train():    \n",
    "\n",
    "    scores_deque = deque(maxlen=100)\n",
    "    scores_array = []\n",
    "    avg_scores_array = []    \n",
    "    \n",
    "    time_start = time.time()\n",
    "\n",
    "    for i_episode in range(num_episodes):\n",
    "        eps = epsilon_annealing(i_episode, max_eps_episode, min_eps)\n",
    "        score = run_episode(env, agent, eps)\n",
    "\n",
    "        scores_deque.append(score)\n",
    "        scores_array.append(score)\n",
    "        \n",
    "        avg_score = np.mean(scores_deque)\n",
    "        avg_scores_array.append(avg_score)\n",
    "\n",
    "        dt = (int)(time.time() - time_start)\n",
    "            \n",
    "        if i_episode % print_every == 0 and i_episode > 0:\n",
    "            print('Episode: {:5} Score: {:5}  Avg.Score: {:.2f}, eps-greedy: {:5.2f} Time: {:02}:{:02}:{:02}'.\\\n",
    "                    format(i_episode, score, avg_score, eps, dt//3600, dt%3600//60, dt%60))\n",
    "            \n",
    "        if len(scores_deque) == scores_deque.maxlen:\n",
    "            ### 195.0: for cartpole-v0 and 475 for v1\n",
    "            if np.mean(scores_deque) >= threshold: \n",
    "                print('\\n Environment solved in {:d} episodes!\\tAverage Score: {:.2f}'. \\\n",
    "                    format(i_episode, np.mean(scores_deque)))\n",
    "                break\n",
    "\n",
    "                        \n",
    "        if i_episode % TARGET_UPDATE == 0:\n",
    "            agent.q_target.load_state_dict(agent.q_local.state_dict()) \n",
    "    \n",
    "    agent.q_target.load_state_dict(agent.q_local.state_dict())\n",
    "    return scores_array, avg_scores_array\n",
    "\n",
    "scores, avg_scores = train()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Plot the Scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "length of scores:  239 , len of avg_scores:  239\n"
     ]
    },
    {
     "data": {
      "image/png": "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zhoxYsSIcZdccskQ1fg9NXDgwAlVVVVSQ0ODMHPmzJGjR4+uGDVq1LjHH3+8V7L3uXz58oJhw4aNmzp16ujly5ebNmBDQ4Nw0UUXlY0fP37s2LFjK5599tkiAFi9enVwwoQJY8eMGVNRXl5eYd9WIBV45oSTVVCzrNM2kcE+09O58Z/VreMMxLpDt+znkE+EolFomjWsTRKItbeO7brGiIKAJMBvZk68xZWsamiRVccHLCvnMMGSF5AcrcSDi0M4e1w/XPlkHZqiStwQNvY9G4vvcE48yh4BSUSOTzTFiencBLNDnOTZOpUcZR1N1Us51RuBxS8AI+P2K+Uk45UfD8bhLaltmJQqfSrCuPAvSTcUXLp0adHMmTPrJ06cGC0qKlI/+eST0KmnnhpetGhR7bJly3otWrSoPhKJkE8//bTg6aefrvz973/fp6ioSN2xY8eWL7/8MnjyySePc98zHA6Ta6+9dtg777yzfeLEidF58+aV3XfffaV33XXXYQAoKSlRtmzZsvXee+8tvffee/suW7asMpW3U1lZ6evfv7854nno0KGxqqoqHwAcPXpUGjp0qGwcl2tra+M+r//4xz+WFBYWqps2bdra0tJCjj/++DHf/e53GwBg48aNuWvXrt1UXl4eO+2000Y988wzva666qo6du3KlSsL+vXrJ3/wwQe7jOeJid7nL37xi5obb7yx7N13390+bty46Jw5c4az+/zqV7/qP2vWrIaXXnpp75EjR8Rp06aNveCCCxr+9Kc/ld5www2Hrr/++tpIJEIUpW3T/rlzwskq2l3WyUjmxFnGMTtyXM4JExbsg13WNMRUPYRKSHxZB9CHprFAbEzRzGe4XRkmIApsH7CsnMIESyggIhxVzX11mDsgCYK+b4+rrBMwnROjrJNriYxEm+L99MxRuGjqYADZ55yEfCJY97BDfH10H7DjLWD274Hyc7pmcZw28+KLLxYvXry4DgAWLFhQy0o7CxcurP/ss88KWlpayPLlywtPOOGExry8PPrZZ5/lLV68uBYAjj/++Eh5eXnYfc/169cHBw0aFJ04cWIUAK688sqjn3zyibmT5SWXXFIHACeccEJ43759KTsEXiMR2tLKvmrVqoIXX3yx95gxYyqmTJkytq6uTtqyZUsQACZMmNBcUVERkyQJ3/ve92o//vhjxxjj4447ruXjjz8u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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "    \n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "print('length of scores: ', len(scores), ', len of avg_scores: ', len(avg_scores))\n",
    "\n",
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111)\n",
    "plt.plot(np.arange(1, len(scores)+1), scores, label=\"Score\")\n",
    "plt.plot(np.arange(1, len(avg_scores)+1), avg_scores, label=\"Avg on 100 episodes\")\n",
    "plt.legend(bbox_to_anchor=(1.05, 1)) \n",
    "plt.ylabel('Score')\n",
    "plt.xlabel('Episodes #')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. Save the resulting weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "save('dir_chk_V0_ddqn', 'cartpole-v0-ddqn-239epis')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ml2-kernel",
   "language": "python",
   "name": "ml2-kernel"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
